package com.atguigu.gmall.task.job;

import com.atguigu.gmall.rabbit.config.MqConst;
import com.atguigu.gmall.rabbit.service.RabbitService;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @author: atguigu
 * @create: 2023-09-22 10:37
 */
@Slf4j
@Component
public class ScheduledJob {

    /**
     * 订单任务逻辑
     * cron表达式：秒 分 时 日 月 周 【年】
     */
    //@Scheduled(cron = "0/5 * * * * ?")
    public void helloWorld() {
        log.info("任务执行了");
    }


    @Autowired
    private RabbitService rabbitService;


    /**
     * 每天凌晨发送秒杀预热消息
     * 开发阶段手动触发任务任务执行即可
     */
    @XxlJob("sendSeckill2CacheMsg")
    public void sendSeckill2CacheMsg() {
        log.info("秒杀预热消息定时执行了");
        String jobParam = XxlJobHelper.getJobParam();
        rabbitService.sendMessage(MqConst.EXCHANGE_DIRECT_TASK, MqConst.ROUTING_TASK_1, jobParam);
    }

    /**
     * 每天下午18点发送秒杀清理消息
     * 开发阶段手动触发任务任务执行即可
     */
    @XxlJob("sendCleanCacheMsg")
    public void sendCleanCacheMsg() {
        log.info("秒杀清理消息定时执行了");
        String jobParam = XxlJobHelper.getJobParam();
        rabbitService.sendMessage(MqConst.EXCHANGE_DIRECT_TASK, MqConst.ROUTING_TASK_18, jobParam);
    }


    /**
     * 分片广播任务
     */
    @XxlJob("shardJob")
    public void shardJob() {
        //total：总分片数，执行器集群的总机器数量；
        int shardTotal = XxlJobHelper.getShardTotal();
        //index：当前分片序号(从0开始)，执行器集群列表中当前执行器的序号；
        int shardIndex = XxlJobHelper.getShardIndex();
        log.info("当前执行器开始任务了，总分片数：{}， 当前分片索引：{}", shardTotal, shardIndex);
    }
}
